home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / ntfs / bitmap.h < prev    next >
C/C++ Source or Header  |  2005-10-18  |  4KB  |  134 lines

  1. /*
  2.  * bitmap.h - Exports for bitmap handling. Part of the Linux-NTFS project.
  3.  *
  4.  * Copyright (c) 2000-2004 Anton Altaparmakov
  5.  *
  6.  * This program/include file is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU General Public License as published
  8.  * by the Free Software Foundation; either version 2 of the License, or
  9.  * (at your option) any later version.
  10.  *
  11.  * This program/include file is distributed in the hope that it will be
  12.  * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  13.  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program (in the main directory of the Linux-NTFS
  18.  * distribution in the file COPYING); if not, write to the Free Software
  19.  * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  20.  */
  21.  
  22. #ifndef _NTFS_BITMAP_H
  23. #define _NTFS_BITMAP_H
  24.  
  25. #include "types.h"
  26. #include "attrib.h"
  27.  
  28. /*
  29.  * NOTES:
  30.  *
  31.  * - Operations are 8-bit only to ensure the functions work both on little
  32.  *   and big endian machines! So don't make them 32-bit ops!
  33.  * - bitmap starts at bit = 0 and ends at bit = bitmap size - 1.
  34.  * - _Caller_ has to make sure that the bit to operate on is less than the
  35.  *   size of the bitmap.
  36.  */
  37.  
  38. /**
  39.  * ntfs_bit_set - set a bit in a field of bits
  40.  * @bitmap:    field of bits
  41.  * @bit:    bit to set
  42.  * @new_value:    value to set bit to (0 or 1)
  43.  *
  44.  * Set the bit @bit in the @bitmap to @new_value. Ignore all errors.
  45.  */
  46. static __inline__ void ntfs_bit_set(u8 *bitmap, const u64 bit,
  47.         const u8 new_value)
  48. {
  49.     if (!bitmap || new_value > 1)
  50.         return;
  51.     if (!new_value)
  52.         bitmap[bit >> 3] &= ~(1 << (bit & 7));
  53.     else
  54.         bitmap[bit >> 3] |= (1 << (bit & 7));
  55. }
  56.  
  57. /**
  58.  * ntfs_bit_get - get value of a bit in a field of bits
  59.  * @bitmap:    field of bits
  60.  * @bit:    bit to get
  61.  *
  62.  * Get and return the value of the bit @bit in @bitmap (0 or 1).
  63.  * Return -1 on error.
  64.  */
  65. static __inline__ char ntfs_bit_get(const u8 *bitmap, const u64 bit)
  66. {
  67.     if (!bitmap)
  68.         return -1;
  69.     return (bitmap[bit >> 3] >> (bit & 7)) & 1;
  70. }
  71.  
  72. static __inline__ void ntfs_bit_change(u8 *bitmap, const u64 bit)
  73. {
  74.     if (!bitmap)
  75.         return;
  76.     bitmap[bit >> 3] ^= 1 << (bit & 7);
  77. }
  78.  
  79. /**
  80.  * ntfs_bit_get_and_set - get value of a bit in a field of bits and set it
  81.  * @bitmap:    field of bits
  82.  * @bit:    bit to get/set
  83.  * @new_value:    value to set bit to (0 or 1)
  84.  *
  85.  * Return the value of the bit @bit and set it to @new_value (0 or 1).
  86.  * Return -1 on error.
  87.  */
  88. static __inline__ char ntfs_bit_get_and_set(u8 *bitmap, const u64 bit,
  89.         const u8 new_value)
  90. {
  91.     register u8 old_bit, shift;
  92.  
  93.     if (!bitmap || new_value > 1)
  94.         return -1;
  95.     shift = bit & 7;
  96.     old_bit = (bitmap[bit >> 3] >> shift) & 1;
  97.     if (new_value != old_bit)
  98.         bitmap[bit >> 3] ^= 1 << shift;
  99.     return old_bit;
  100. }
  101.  
  102. extern int ntfs_bitmap_set_run(ntfs_attr *na, s64 start_bit, s64 count);
  103. extern int ntfs_bitmap_clear_run(ntfs_attr *na, s64 start_bit, s64 count);
  104.  
  105. /**
  106.  * ntfs_bitmap_set_bit - set a bit in a bitmap
  107.  * @na:        attribute containing the bitmap
  108.  * @bit:    bit to set
  109.  *
  110.  * Set the @bit in the bitmap described by the attribute @na.
  111.  *
  112.  * On success return 0 and on error return -1 with errno set to the error code.
  113.  */
  114. static __inline__ int ntfs_bitmap_set_bit(ntfs_attr *na, s64 bit)
  115. {
  116.     return ntfs_bitmap_set_run(na, bit, 1);
  117. }
  118.  
  119. /**
  120.  * ntfs_bitmap_clear_bit - clear a bit in a bitmap
  121.  * @na:        attribute containing the bitmap
  122.  * @bit:    bit to clear
  123.  *
  124.  * Clear @bit in the bitmap described by the attribute @na.
  125.  *
  126.  * On success return 0 and on error return -1 with errno set to the error code.
  127.  */
  128. static __inline__ int ntfs_bitmap_clear_bit(ntfs_attr *na, s64 bit)
  129. {
  130.     return ntfs_bitmap_clear_run(na, bit, 1);
  131. }
  132.  
  133. #endif /* defined _NTFS_BITMAP_H */
  134.